1. Field of the Invention
The present invention relates generally to computer architecture and, more particularly, to a system and method for identifying and configuring computer hardware.
2. Related Art
A computer system is composed of a number of well-known hardware and software components. These components typically include a processor, memory, and communication buses, as well as bus controllers and a data storage device such as a hard disk drive. Generally one or more of the components are mounted on a printed circuit board referred to as a system board or, more commonly, a motherboard.
The functionality of the computer system can be expanded through the use of additional hardware devices. Such hardware devices are typically connected to the computer system through a physical slot on the system board that enables the installed hardware device to communicate with other components in the computer system. Slot numbers are generally used to identify the additional hardware devices to an operating system on the computer system. Thus, through the addition of hardware devices, a more complex computer system can be built.
Many different types of hardware devices are generally available. Hardware devices include, for example, network interface cards, fax/modem cards, sound cards, etc. Like other products, hardware devices are typically offered by different vendors, which often provide different models of each type of hardware device. Also, different versions of the hardware devices are often offered over time to accommodate revisions of a particular device model. These hardware devices are connected to the computer system through one or more input/output (I/O) buses, which may be of many different types including, for example, the well-defined ISA, EISA, and PnPISA buses.
For each additional hardware device installed in the computer system, an associated driver is loaded into the computer memory, and is used by the operating system and application programs to communicate with the associated hardware device. A driver is a software program that serves as an interface between two programs or between a program and a hardware device. Drivers are often specialized; a particular driver supports a single associated hardware device model and is often provided by the hardware device vendor.
Oftentimes, vendors provide generic drivers that can be used to communicate with more than one hardware device model to avoid creating drivers for every available model. Also, operating system manufacturers often provide both, a driver specifically configured for a particular hardware device model, as well as generic drivers which support multiple hardware device models. Although the generic drivers may be used to communicate with a hardware device, they sometimes lack the necessary functionality to enable the operating system or application programs to take advantage of all of the features offered by that hardware device. Using such a driver may not only be less efficient, but it may also unintentionally cause computer system errors or corrupt data.
In addition, problems arise when multiple drivers are installed in the computer system. A hardware device requires particular computer system resources to perform its intended functions. The settings on or within the installed hardware devices which identify the requisite resources may conflict with each other. That is, multiple hardware devices installed in the same computer system may have the same setting for a particular resource. For example, hardware devices typically require the use of a system resource referred to as an I/O port. An I/O port is an address which uniquely identifies a hardware device to the operating system for performing input and output functions from the processor. Since an I/O port address must be uniquely assigned to enable each hardware device to be accurately identified, one hardware device may not use the same I/O port address as another. Conflicting resource settings that cause such a condition must be resolved for the computer system to operate properly. Thus, the installation of drivers and the configuration of hardware devices has traditionally been a source of inefficiencies and errors in computer systems.
Historically, in Intel/IBM PC computer systems, users of a computer system who install and maintain the computer system have manually configured the system to support the various hardware devices that are installed in the system. For example, to add a network interface card to a computer system, the user was required to identify the correct resource settings from documentation provided with the network interface card, and verify that these resource settings did not conflict with resource settings of other installed hardware devices. The user was also required to load the required driver for the network interface card into the memory of the computer system. Thereafter, the functions of the network interface card could be accessed by the operating system and application programs running on the computer system if the resource settings were correctly selected and potential conflicts correctly anticipated.
Due to the complexity of computer systems and the multiple combinations of hardware devices which could be simultaneously present on a computer system, manual configuration has become problematic and time-consuming, even for technically-skilled users. Also, with the increased availability of computer systems to the general public, users with limited technical knowledge have become very numerous. These users generally cannot effectively or efficiently configure the computer systems to include various hardware devices.
As a result, over time, the hardware industry has evolved from manual configuration to software-assisted manual configuration. Software-assisted manual configuration provides the user with a more friendly interface for configuring a computer system and eliminates the requirement for the user to have knowledge of the resource settings. An example of such a software-assisted manual configuration system is the commonly available EISA Configuration Utility (ECU).
The EISA Configuration Utility (ECU) is a software program which identifies the proper resource settings such as hardware interrupts and memory settings for a particular hardware device installed on an EISA type bus. For example, in a computer system which has an EISA bus, a hardware device such as a network interface card is inserted by the user into an available slot. The user must run the ECU, and then manually load the driver for the hardware device, specifying the slot number corresponding to the physical slot where the hardware device is installed.
Although the user does not have to know the hardware interrupts and memory settings for the particular hardware device (since these settings are determined by the ECU), the user must nevertheless select the correct driver for the hardware device and specify the slot number where it was located. This is often time consuming and sometimes results in an incorrect driver being selected. Also, the ECU is only available for hardware devices installed in an EISA bus. There is no corresponding software assistance for other bus types such as IDE or ISA, making this approach extremely limited.
Some hardware systems have evolved from software-assisted manual configuration to rudimentary automatic identification and configuration. However, the existing automatic identification and configuration systems are also limited to a few specific systems and have many drawbacks. An example of such an automatic identification and configuration system is Windows 95.TM. Plug and Play, available from the Microsoft Corporation for use with the Windows 95.TM. operating system. (Windows 95 is a trademark of Microsoft Corporation.)
The Plug and Play system searches a list of drivers stored on the hard disk drive to determine which driver is appropriate for an installed hardware device. When the installed hardware devices are to be selected for a particular driver, the system accepts the first driver that it finds in the list that can support the hardware device. Since multiple drivers are often available, there may be drivers other than the one selected that are more appropriate for use with the particular hardware device. Even though there may be a more appropriate driver available, the system will not find that driver and associate it with the hardware device, since the selection process is completed after identifying the first compatible driver. In other words, Plug and Play treats all sufficient drivers as being equally acceptable for use with a hardware device, yielding less than optimal associations between drivers and hardware devices. As noted, this may result in a loss of functionality, data loss or corruption, system errors, etc.
Also, in the Plug and Play system a dialog box appears at the beginning of the configuration sequence to suggest the use of a default driver supplied with operating system. The Plug and Play system also provides the user with the option of selecting the vendor-supplied driver using a floppy disk or CDROM from the hardware device manufacturer. Unfortunately, the Plug and Play system does not qualify which of these drivers should be used with the hardware device. The user must have knowledge of the hardware device and driver, subjecting this approach to the same drawbacks as the software-assisted manual configuration approach described above.
Another drawback of Plug and Play is that it is limited to Intel/IBM PC systems which have the Windows 95 operating system installed, and therefore does not include such operating systems as DOS, Windows.RTM., OS/2.RTM., UNIX.RTM., NetWare.RTM.) and IntranetWare.RTM. (Windows.RTM. is a registered trademark of Microsoft Corp., OS/2.RTM. is a registered trademark of International Business Machines Corporation, UNIX.RTM. is a registered trademark of X/Open Company, Limited, and NetWare.RTM. and IntranetWare.RTM. are a registered trademark of Novell, Incorporated.)
What is needed, therefore, is a hardware device identification and configuration system which is user-independent and is widely available on all types of computer systems. The system should select the most appropriate available driver to support a particular hardware device. The system should also be backwards compatible with existing operating systems and hardware devices.